#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=10000;
namespace ac{
int a[maxn],path[maxn],f[maxn];
int n,len,index;
int dp(){
    //path存放最长递增子序列的解
    memset(f,0,sizeof(f));
    memset(path,-1,sizeof(path));
    len=0;
    f[0]=1;
    for(int i=1;i<n;i++){
        f[i]=1;
        for(int j=0;j<i;j++){
            if(a[j]<a[i]&&f[i]<f[j]+1){
                path[i]=j;
                f[i]=f[j]+1;
            }
        }
    }
    for(int i=0;i<n;i++){
        if(len<f[i]){
            len=f[i];
            index=i;
        }
    }
    return len;//最长递增子序列的长度
}
void showpath(int id){
    if(id==-1)return ;
    showpath(path[id]);
    cout<<a[id]<<" ";
}
};

int main()
{
    IOS;
    cout<<"数组长度:";
    cin>>ac::n;
    cout<<"数组元素:"<<endl;
    for(int i=0;i<ac::n;i++){
        cin>>ac::a[i];
    }
    cout<<"最长递增子序列的长度:"<<ac::dp()<<endl;
    cout<<"最长递增子序列的元素:"<<endl;
    ac::showpath(ac::index);
    cout<<endl;
    getchar();
    getchar();
    return 0;
}
